mid-point algorithm